import './utils/$';
App({
  data: {
    host: wx.$.host,
    share: 3, //是否是分享进来的
    navHeight: 0 //导航栏高度
  },
  onShow: function(opp) {
    console.log(opp)
    wx.$.recommend_id = opp.query.recommend_id ? opp.query.recommend_id : 0;
    wx.$.channel = opp.query.channel ? opp.query.channel : '';
    //opp.scene 用来判断小程序打开方式如分享海报等入口进入的
    if (
      opp.scene == 1007 ||
      opp.scene == 1008 ||
      opp.scene == 1047 ||
      opp.scene == 1036
    ) {
      this.data.share = true;
    }
    this.data.opp = opp;
    if (
      opp.scene == 1020 ||
      opp.scene == 1012 ||
      opp.scene == 1013 ||
      opp.scene == 1014 ||
      opp.scene == 1035 ||
      opp.scene == 1058 ||
      opp.scene == 1067 ||
      opp.scene == 1073 ||
      opp.scene == 1074 ||
      opp.scene == 1082 ||
      opp.scene == 1091
    ) {
      this.data.share = true;
    }
    const updateManager = wx.getUpdateManager();
    updateManager.onCheckForUpdate(function(res) {
      // 请求完新版本信息的回调
    });
    updateManager.onUpdateReady(function() {
      // 版本更新说明
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，是否重启应用？',
        success: function(res) {
          if (res.confirm) {
            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
            updateManager.applyUpdate();
          }
        }
      });
    });
    updateManager.onUpdateFailed(function() {
      // 新版本下载失败
    });
  },
  onUnload: function() {
    this.data.share = 3;
  },
  onLaunch: function(options) {
    // this.getToken();
    wx.$.fetch(`static/ToConfigure.json`, {
      method: 'get'
    }).then(res => {
      this.data.jsonPage = res.data;
      if (this.getjsonPage) {
        this.getjsonPage(res.data);
      }
    });
    wx.getSystemInfo({
      //导航高度
      success: res => {   
      //  待修复完美布局 wx.getMenuButtonBoundingClientRect() 根据胶囊布局来，但是ios bug目前没有修复待定 补全wx.onWindowResize
        this.data.windowHeight = res.windowHeight;
        this.data.navHeight = res.statusBarHeight + 46;
        this.data.navHeight2 = res.statusBarHeight;
        let modelmes = res.model;
        this.data.screenHeight = res.screenHeight;
        this.data.isIphone = modelmes.search('iPhone') != -1 ? true : false;
        this.data.isIphoneX = modelmes.search('iPhone X') != -1 ? true : false;
      },
      fail(err) {
        console.log(err);
      }
    });
  },
  /* 自定义方法用于整合api调用方式 */
  promisify: api => {
    return (options, ...params) => {
      return new Promise((resolve, reject) => {
        const extras = {
          success: resolve,
          fail: reject
        };
        api({ ...options, ...extras }, ...params);
      });
    };
  },
  /* 海报自适应单位：用于海报绘制时的 */
  getRatio() {
    let w = 0;
    wx.getSystemInfo({
      success: function(res) {
        w = res.windowWidth / 375; //按照750的屏宽? ? ?
      }
    });
    return w;
  },
  /* 海报多行文本方法 */
  fontLineBreak(ctx, left, top, spacing, max_width, text, number, width) {
    // 多行文本调用 原型 距离左 头  行间距  最大宽度  文本  行数  行宽
    // 使用示例
    // this.fontLineBreak(ctx, 106 / 2 * w, 584 / 2 * w, 15, 400 / 2 * w, lefts.data.details.address, 1, 400 / 2 * w);
    var ssss = text;
    var chr = ssss.split('');
    var row = [];
    var temp = '';
    var widthss = width; //字符串最大宽度
    for (var a = 0; a < chr.length; a++) {
      if (ctx.measureText(temp).width < widthss) {
        temp += chr[a];
      } else {
        a--; //这里添加了a-- 是为了防止字符丢失，效果图中有对比
        row.push(temp);
        temp = '';
      }
    }
    row.push(temp); //如果数组长度大于number 则截取前number个
    if (row.length > number) {
      var rowCut = row.slice(0, number);
      var number_ = number - 1;
      var rowPart = rowCut[number_];
      var test = '';
      for (var a = 0; a < rowPart.length; a++) {
        if (ctx.measureText(test).width < widthss - 20) {
          test += rowPart[a];
        } else {
          break;
        }
      }
      var group = test + '...'; //这里只显示两行，超出的用...表示
      rowCut.splice(number_, 1, group);
      row = rowCut;
    }
    for (var b = 0; b < row.length; b++) {
      ctx.fillText(row[b], left, top + b * spacing, max_width);
    }
  },
  // ctx.measureText(username).width   一般用于文字居中
  /* 绘制圆角图片 */
  imgfillet(ctx, img, left, top, width, height, w, fillet) {
    //     ctx   图片  起始点X Y   图片宽  高   适配单位  圆角半径
    ctx.beginPath();
    ctx.save();
    left = (left / 2) * w;
    left = Math.ceil(left);
    top = (top / 2) * w;
    top = Math.ceil(top);
    width = (width / 2) * w;
    width = Math.ceil(width);
    height = (height / 2) * w;
    height = Math.ceil(height);
    fillet = (fillet / 2) * w;
    fillet = Math.ceil(fillet);
    ctx.setLineWidth(1);
    ctx.setStrokeStyle('#ffffff');
    ctx.moveTo(left + fillet, top);
    ctx.lineTo(left + width - fillet, top);
    ctx.arcTo(left + width, top, left + width, top + fillet, fillet);
    ctx.lineTo(left + width, top + height - fillet);
    ctx.arcTo(
      left + width,
      top + height,
      left + width - fillet,
      top + height,
      fillet
    );
    ctx.lineTo(left + fillet, top + height);
    ctx.arcTo(left, top + height, left, top + height - fillet, fillet);
    ctx.lineTo(left, top + fillet);
    ctx.arcTo(left, top, left + fillet, top, fillet);
    ctx.stroke();
    ctx.clip();
    ctx.drawImage(img, left, top, width, height);
    ctx.restore();
    ctx.closePath();
  },
  /*
   * 登陆判断
   * btnLandingJudgment调用页面示例（首页的判断讲师 方法名 isTeacher）
   *  url 为要打开的页面URL
   *  type 为true时则登陆后直接打开该链接 不填或者为false时登陆后返回原页面
   *  executeType 为true时登录成功执行原页面方法 不填或者为false时登陆后正常返回
   *  为防止出错 当type为true和executeType也为出true时 回调函数中请不要再写跳转
   */
  btnLandingJudgment(url, type, executeType) {
    var token = wx.getStorageSync('vs-token');
    var left = this;
    if (token) {
      if (type) {
        wx.navigateTo({
          url: url
        });
      } else if (executeType) {
        setTimeout(() => {
          left.AcceptData(url);
        }, 200);
      }
    } else {
      wx.navigateTo({
        url: '/pages/login/login',
        events: {
          monitoringData: function(data) {
            // type 为true时登陆成功后执行原页面的方法
            if (data.type) {
              left.AcceptData(url);
            }
          }
        },
        success: function(res) {
          res.eventChannel.emit('TransferOfData', {
            url: url,
            typeurl: type,
            executeType: executeType
          });
        }
      });
    }
  }
});
